package com.kun.companion.core.ui.view;

import cn.hutool.core.lang.UUID;
import javafx.scene.layout.Region;

import java.util.function.Function;

/**
 * 标签页数据模型，封装标签页的显示属性、状态及内容加载逻辑
 *
 * <p>属性说明：
 * <ul>
 *     <li>id - 唯一标识符，自动生成</li>
 *     <li>state - 当前加载状态（加载中/成功/错误）</li>
 *     <li>contentHandler - 内容处理函数，用于生成或更新内容区域</li>
 * </ul>
 *
 * @author gzc
 */
public class KunTab {
    /**
     * 唯一标识
     */
    private final String id;
    /**
     * 图标路径
     */
    private String svgPath;
    /**
     * 显示文本
     */
    private String cellText;
    /**
     * 是否启用缓存
     */
    private boolean cache;
    /**
     * 初始状态
     */
    private State state = State.LOADED;
    /**
     * 窗口视图处理函数
     */
    private Function<Region, Region> contentHandler;

    /**
     * 标签页状态枚举
     */
    public enum State {
        /**
         * 内容加载中
         */
        LOADING,
        /**
         * 内容加载完成
         */
        LOADED,
        /**
         * 加载发生错误
         */
        ERROR
    }

    /**
     * 判断标签页相等性（基于ID）
     *
     * @param obj 比较对象
     * @return 是否相同
     */
    @Override
    public boolean equals(Object obj) {
        return (obj instanceof KunTab) && ((KunTab) obj).id.equals(this.id);
    }

    /**
     * 构造基础标签页
     *
     * @param cellText 标签显示文本
     */
    public KunTab(String cellText) {
        this(null, cellText);
    }

    /**
     * 构造带图标的标签页
     *
     * @param svgPath  SVG图标路径，可为null
     * @param cellText 标签显示文本
     */
    public KunTab(String svgPath, String cellText) {
        this(svgPath, cellText, node -> node);
    }

    /**
     * 完整构造函数
     *
     * @param svgPath        SVG图标路径，可为null
     * @param cellText       标签显示文本
     * @param contentHandler 内容处理函数，接收可能缓存的节点，返回新节点
     */
    public KunTab(String svgPath, String cellText, Function<Region, Region> contentHandler) {
        this.id = UUID.fastUUID().toString(true);
        this.svgPath = svgPath;
        this.cellText = cellText;
        this.contentHandler = contentHandler;
    }

    public String getId() {
        return id;
    }

    public String getSvgPath() {
        return svgPath;
    }

    public void setSvgPath(String svgPath) {
        this.svgPath = svgPath;
    }

    public String getCellText() {
        return cellText;
    }

    public void setCellText(String cellText) {
        this.cellText = cellText;
    }

    public boolean isCache() {
        return cache;
    }

    public void setCache(boolean cache) {
        this.cache = cache;
    }

    public Function<Region, Region> getContentHandler() {
        return contentHandler;
    }

    public void setContentHandler(Function<Region, Region> contentHandler) {
        this.contentHandler = contentHandler;
    }

    public State getState() {
        return state;
    }

    public void setState(State state) {
        this.state = state;
    }


}